package writtenTraining.day9;

import java.util.*;

/**
 * day9:(1)模拟：添加逗号
 */
public class Main {
    public static void main(String[] args) {
        // 模拟

        // 输入
        Scanner in = new Scanner(System.in);
        long num = in.nextLong();

        // 转化为字符串
        StringBuilder str =new StringBuilder();
        StringBuilder ret = new StringBuilder();
        while(num != 0) {
            str.append((num % 10) + "");
            num /= 10;
        }
        
        int len = str.length();
        for(int i = 0; i < len - 1; i++) {
            ret.append(str.charAt(i));
            // 如果长度为 3 就添加逗号
            if( (i + 1) % 3 == 0) {
                ret.append(",");
            }
        }

        ret.append(str.charAt(len-1));
        // 逆置
        ret.reverse();

        // 输出结果
        System.out.println(ret.toString());
    }
}

/**
 * day9:(2)动态规划+斐波那契数列：DP2 跳台阶
 */



 class Main1 {
    public static void main(String[] args) {
        // 动态规划思想 + 斐波那契数列

        // 输入
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();

        // 特判
        if(n == 0 || n == 1) {
            System.out.println(1);
            return;
        }

        // 创建dp
        int[] dp = new int[n+1];

        // 初始化
        dp[0] = 1; dp[1] = 1;

        // 填表
        for(int i = 2; i <= n; i++) {
            dp[i] = dp[i-1] + dp[i-2];
        }
        // 返回值
        System.out.println(dp[n]);
    }
}


/**
 * day9:(3)模拟+贪心：JZ61 扑克牌顺子
 */


 class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param numbers int整型一维数组
     * @return bool布尔型
     */
    public boolean IsContinuous (int[] numbers) {
        // write code here
        // 排序 + 贪心

        // 排序
        Arrays.sort(numbers);

        int zero = 0, count = 0;
        for(int i = 0; i < numbers.length - 1; i++) {
            if(numbers[i] == 0) {
                // 统计 0 的个数
                zero++;
            } else {
                // 如果有相同的数就不可能出现顺子
                if(numbers[i] == numbers[i+1]) {
                    return false;
                }
                // 统计差值
                count += (numbers[i+1] - numbers[i] - 1);
            }
        }

        // 特殊情况判断
        if(zero == 4) {
            return true;
        }

        // 差的个数 <= zero 个数就可以补上
        if(count <= zero) {
            return true;
        }

        return false;
    }
}


/**
 *  day9:(3)哈希+贪心：JZ61 扑克牌顺子
 */



 class Solution1 {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param numbers int整型一维数组
     * @return bool布尔型
     */
    public boolean IsContinuous (int[] numbers) {
        // write code here
        // 哈希 + 贪心

        int[] hash = new int[14];

        // 统计
        for(int num : numbers) {
            hash[num]++;
            // 如果这个数重复出现就不能构成顺子
            if(num != 0 && hash[num] > 1) {
                return false;
            }
        }

        // 得到第一个数
        int prev = 0;
        int i = 1;
        for(; i < 14; i++) {
            if(hash[i] != 0) {
                prev = i;
                hash[i] = 0;
                break;
            }
        }

        int count = 0;
        for(; i < 14; i++) {
            // 判断当前数是否存在
            if(hash[i] != 0) {
                count += (i - prev - 1);
                prev = i;
                hash[i] = 0;
            }
        }

        // 如果 0 的个数为 4 就一定为顺子
        if(hash[0] == 4) {
            return true;
        }

        // 判断结果
        if(hash[0] >= count) {
            return true;
        }

        return false;
    }
}